package utils

import (
	"strings"

	"github.com/mattn/go-runewidth"
)

// AlignLeft 左对齐字符串，总显示宽度为 width（不足时右侧填充空格）
func AlignLeft(s string, width int) string {
	actualWidth := runewidth.StringWidth(s)
	if actualWidth > width {
		// 截断超长部分，保留前 width 显示宽度
		return runewidth.Truncate(s, width, "")
	}
	// 计算需要填充的空格数
	padding := width - actualWidth
	return s + strings.Repeat(" ", padding)
}

// AlignRight 右对齐字符串，总显示宽度为 width（不足时左侧填充空格）
func AlignRight(s string, width int) string {
	actualWidth := runewidth.StringWidth(s)
	if actualWidth > width {
		return runewidth.Truncate(s, width, "")
	}
	padding := width - actualWidth
	return strings.Repeat(" ", padding) + s
}

// AlignCenter 居中对齐字符串（不足时左右均分空格）
func AlignCenter(s string, width int) string {
	actualWidth := runewidth.StringWidth(s)
	if actualWidth > width {
		return runewidth.Truncate(s, width, "")
	}
	padding := width - actualWidth
	left := padding / 2
	right := padding - left
	return strings.Repeat(" ", left) + s + strings.Repeat(" ", right)
}
